package saee.bean;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;

import saee.dao.PessoaDAO;
import saee.enuns.Perfil;
import saee.modelo.Pessoa;
import sun.misc.Perf;

@ManagedBean
@ViewScoped
public class PessoaBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Pessoa pessoa = new Pessoa();
	private List<Pessoa> pessoas;

	public void limparPessoa() {
		this.pessoa = new Pessoa();
		this.pessoas = null;
	}

	public Perfil[] getPerfil() {
		return Perfil.values();
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		System.out.println("setou " + pessoa.getId());
		this.pessoa = pessoa;
	}

	@SuppressWarnings("unchecked")
	public List<Pessoa> getPessoas() {
		if (pessoas == null) {
			PessoaDAO dao = new PessoaDAO();
			this.pessoas = dao.listarTodos(Pessoa.class);

		}

		return pessoas;
	}

	public void setPessoas(List<Pessoa> pessoas) {
		this.pessoas = pessoas;
	}

	public void gravarPessoa(ActionEvent actionEvent) {
		PessoaDAO pessoaDAO = new PessoaDAO();
		RequestContext context = RequestContext.getCurrentInstance();
		FacesMessage msg = null;
		boolean gravado = false;

		try {
			pessoaDAO.cadastrar(pessoa);
			gravado = true;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Gravado com sucesso", null);

		} catch (Exception e) {
			e.printStackTrace();
			gravado = false;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Erro ao gravar", null);
		}
		limparPessoa();
		FacesContext.getCurrentInstance().addMessage(null, msg);
		context.addCallbackParam("gravado", gravado);
	}

	public void alterarPessoa(ActionEvent actionEvent) {
		PessoaDAO pessoaDAO = new PessoaDAO();
		RequestContext context = RequestContext.getCurrentInstance();
		FacesMessage msg = null;
		boolean gravado = false;

		try {
			pessoaDAO.atualizar(pessoa);
			gravado = true;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Alterado com sucesso", null);

		} catch (Exception e) {
			e.printStackTrace();
			gravado = false;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Erro ao alterar", null);
		}
		limparPessoa();
		FacesContext.getCurrentInstance().addMessage(null, msg);
		context.addCallbackParam("gravado", gravado);
	}

	public void removerPessoa() {

		PessoaDAO pessoaDAO = new PessoaDAO();
		FacesMessage msg = null;

		try {
			pessoaDAO.excluir(Pessoa.class, pessoa.getId());
			limparPessoa();

			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Excluido com sucesso", null);
		} catch (Exception e) {
			e.printStackTrace();
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Erro ao excluir", null);
		}
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}

}
